package shm.capaDatos.entidades;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorType;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

import shm.capaDatos.vo.CategoriaStakeholderVO;
import shm.capaDatos.vo.DatosAuditoriaVO;
import shm.capaDatos.vo.UsuarioVO;


@Entity
@Table(name="CategoriaStakeholder")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "Tipo", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorValue("C")
public abstract class CategoriaStakeholder implements Serializable{
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;
	@Column(length=255,nullable = true, unique = false)
	private String descripcion;
	@Embedded
	private DatosAuditoria datosAuditoria;
	private static final long serialVersionUID = 1L;

	public CategoriaStakeholder(Integer id, String descripcion,DatosAuditoria datosAuditoria) {
		super();
		this.id = id;
		this.descripcion = descripcion;
		this.datosAuditoria = datosAuditoria;
	}
	public CategoriaStakeholder(){
		
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	
	public DatosAuditoria getDatosAuditoria() {
		return datosAuditoria;
	}
	
	public void setDatosAuditoria(DatosAuditoria datosAuditoria) {
		this.datosAuditoria = datosAuditoria;
	}
	public abstract CategoriaStakeholderVO getVO();
	public  void setVO(CategoriaStakeholderVO categoriaStakeholderVO){
		this.id = categoriaStakeholderVO.getId();
		this.descripcion = categoriaStakeholderVO.getDescripcion();

	}
	public void actualizacion(UsuarioVO usuarioActualizacion, Date fechaActualizacion){
		if(this.datosAuditoria == null){
			this.datosAuditoria = new DatosAuditoria();
		}
		this.datosAuditoria.actualizacion(usuarioActualizacion, fechaActualizacion);
	}
	public void creacion(UsuarioVO usuarioCreacion, Date fechaCreacion){
		this.actualizacion(usuarioCreacion, fechaCreacion);
		this.datosAuditoria.creacion(usuarioCreacion, fechaCreacion);
	}
	public void eliminacion(UsuarioVO usuarioEliminacion, Date fechaEliminacion){
		this.actualizacion(usuarioEliminacion, fechaEliminacion);
		this.datosAuditoria.eliminacion(usuarioEliminacion, fechaEliminacion);
	}
	public DatosAuditoriaVO getDatosAuditoriaVO(){
		DatosAuditoriaVO datosAuditoriaVO = null;
		if(this.datosAuditoria != null){
			datosAuditoriaVO = this.datosAuditoria.getVO();
		}
		return datosAuditoriaVO;
	}
	
}
